package spring.boot.admin.service;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import spring.boot.admin.mapper.SysRoleMenuMapper;
import spring.boot.admin.model.SysRoleMenu;

import java.util.ArrayList;
import java.util.List;

/**
 * 如果整个service都是使用的one数据源，可以放在类上面
 */
@Service
@DS("master")
public class SysRoleMenuService extends ServiceImpl<SysRoleMenuMapper, SysRoleMenu> {


    /**
     * 根据菜单id查询关联关系的数量
     */
    public int countByMenuId(Long menuId) {
        QueryWrapper<SysRoleMenu> wrapper = new QueryWrapper<>();
        wrapper.eq("sys_menu_id", menuId);
        return count(wrapper);
    }


    /**
     * 根据角色id查询角色菜单关联关系的数量
     */
    public int countByRoleId(Long roleId) {
        QueryWrapper<SysRoleMenu> wrapper = new QueryWrapper<>();
        wrapper.eq("sys_role_id", roleId);
        return count(wrapper);
    }


    /**
     * 根据角色和菜单，判断关联关系的数量，有返回true  无返回false
     */
    public Boolean hasRoleMenu(Long roleId, Long menuId) {
        QueryWrapper<SysRoleMenu> wrapper = new QueryWrapper<>();
        wrapper.eq("sys_role_id", roleId);
        wrapper.eq("sys_menu_id", menuId);
        int count = count(wrapper);
        if (count > 0) {
            return Boolean.TRUE;
        } else {
            return Boolean.FALSE;
        }
    }

    /**
     * 修改角色对应的菜单
     */
    public String updateRoleMenu(Long roleId, Long[] menuIds) {
        //删除所有原有的关联关系
        UpdateWrapper<SysRoleMenu> wrapper = new UpdateWrapper<>();
        wrapper.eq("sys_role_id", roleId);
        remove(wrapper);
        //批量增加新的关联关系
        List<SysRoleMenu> sysRoleMenus = new ArrayList<>();
        for (Long menuId : menuIds) {
            SysRoleMenu sysRoleMenu = new SysRoleMenu();
            sysRoleMenu.setSysRoleId(roleId);
            sysRoleMenu.setSysMenuId(menuId);
            sysRoleMenus.add(sysRoleMenu);
        }
        saveBatch(sysRoleMenus);
        return "1";
    }


}
